home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf / ASo-Tools / Sources / MakeDir.asm < prev    next >
Assembly Source File  |  1994-04-03  |  4KB  |  137 lines

  1. ;mit DOBJ gewonnenes Listing von 'MakeDir'
  2. ;anschließend per Hand optimiert und so verändert, daß neue Directorys
  3. ; gleich als nicht ausführbar markiert werden.
  4.  
  5.         NOLIST
  6.         INCLUDE "exec/LVO.i"
  7.         INCLUDE "exec/execbase.i"
  8.         INCLUDE "dos/LVO.i"
  9.         INCLUDE "dos/dos.i"
  10.         INCLUDE "dos/dosextens.i"
  11.         LIST
  12.  
  13. _DirName:       EQU -24 ;Zeiger auf das aktuelle zu erzeugende Directory.
  14.                         ;Offset zu A5
  15. _ExecBase:      EQU 36  ;Zeiger auf die Basis der exec.library. Offset zu sp
  16. _DOSBase:       EQUR A3
  17. DirLock:        EQUR D5 ;BPTR auf das alte/neue Directory
  18. IOError:        EQUR D6 ;der erhaltene IO-Fehler
  19. RetCode:        EQUR D7 ;der beabsichtigte Return-Code
  20.  
  21.         SECTION only,CODE
  22.  
  23. main:   LINK.W  A5,#-36
  24.         MOVEM.L D2-D3/D5-D7/A2-A3/A6,-(sp)
  25.         MOVEA.W #_AbsExecBase,A0
  26.         MOVEA.L (A0),A6
  27.         MOVEQ.L #RETURN_FAIL,RetCode    ;Vorgabe für den Return-Wert
  28.         MOVEQ.L #0,IOError
  29.         MOVE.L  A6,_ExecBase(sp)
  30.         LEA.L   dosname(pc),A1
  31.         MOVEQ.L #36,D0
  32.         CALL    OpenLibrary
  33.         move.l  D0,_DOSBase
  34.         tst.l   D0
  35.         beq     nodos
  36.         LEA.L   pattern(pc),A0
  37.         MOVE.L  A0,D1
  38.         LEA.L   -28(A5),A1
  39.         MOVE.L  A1,D2
  40.         MOVEQ.L #0,D3
  41.         move.l  d3,(a1)
  42.         CALLDOS ReadArgs
  43.         MOVE.L  D0,32(sp)
  44.         TST.L   D0
  45.         bne     2$
  46.         CALL    IOErr
  47.         MOVE.L  D0,D1
  48.         MOVE.L  D3,D2
  49.         CALL    PrintFault
  50.         bra     abort
  51. 2$:     MOVEQ.L #0,IOError
  52.         MOVEA.L -28(A5),A2
  53.         MOVE.L  A2,D1
  54.         bne     3$
  55.         MOVEQ.L #RETURN_FAIL,RetCode
  56.         MOVE.L  D3,D2
  57.         LEA.L   nonameerr(pc),A1
  58.         MOVE.L  A1,D1
  59.         CALL    VPrintf
  60.         bra     .l3
  61. 3$:     MOVEQ.L #RETURN_OK,RetCode
  62.         MOVE.L  (A2),_DirName(A5)
  63.         bra     .l4
  64. .l5:    MOVE.L  _DirName(A5),D1
  65.         MOVEQ.L #ACCESS_READ,D2
  66.         CALLDOS Lock
  67.         MOVE.L  D0,DirLock
  68.         beq     1$
  69.         MOVEQ.L #RETURN_ERROR,RetCode
  70.         MOVEQ.L #0,IOError
  71.         LEA.L   twiceerr(pc),A1
  72.         MOVE.L  A1,D1
  73.         LEA.L   _DirName(A5),A6
  74.         MOVE.L  A6,D2
  75.         CALLDOS VPrintf
  76.         bra     unlockthis
  77. 1$:     MOVE.L  _DirName(A5),D1
  78.         CALL    CreateDir
  79.         MOVE.L  D0,DirLock
  80.         beq     2$
  81.         MOVE.L  DirLock,D1
  82.         CALL    UnLock
  83.         move.l  _DirName(a5),d1
  84.         moveq   #FIBF_EXECUTE,d2
  85.         CALL    SetProtection
  86.         bra     nolock
  87. 2$:     MOVEQ.L #RETURN_ERROR,D0
  88.         CMP.L   D0,RetCode
  89.         beq     3$
  90.         move.l  d0,d7
  91.         CALL    IOErr
  92.         MOVE.L  D0,IOError
  93. 3$:     LEA.L   cantcreateerr(pc),A0
  94.         MOVE.L  A0,D1
  95.         LEA.L   _DirName(A5),A1
  96.         MOVE.L  A1,D2
  97.         CALL    VPrintf
  98. unlockthis:
  99.         MOVE.L  DirLock,D1
  100.         CALL    UnLock
  101. nolock: ADDQ.L  #4,A2
  102.         MOVE.L  (A2),_DirName(A5)
  103. .l4:    TST.L   _DirName(A5)
  104.         bne     .l5
  105. .l3:    MOVE.L  32(sp),D1
  106.         CALLDOS FreeArgs
  107.         MOVE.L  IOError,D1
  108.         CALL    SetIoErr
  109. abort:  TST.L   IOError
  110.         beq     closedos
  111.         MOVE.L  IOError,D1
  112.         MOVEQ.L #0,D2
  113.         CALLDOS PrintFault
  114. closedos:
  115.         MOVEA.L _DOSBase,A1
  116.         MOVEA.L _ExecBase(sp),A6
  117.         CALL    CloseLibrary
  118.         bra     quit
  119. nodos:  move.l  _ExecBase(sp),A0
  120.         MOVEA.L (A0),A1
  121.         MOVEA.L ThisTask(A1),A0
  122.         MOVEQ.L #ERROR_INVALID_RESIDENT_LIBRARY,D0
  123.         MOVE.L  D0,pr_Result2(A0)
  124. quit:   MOVE.L  RetCode,D0
  125.         MOVEM.L (sp)+,D2-D3/D5-D7/A2-A3/A6
  126.         UNLK    A5
  127.         RTS
  128.  
  129.                 DC.B    "$VER: makedir 37.211 (7.7.93 by as)",$0a,$0d,0
  130. dosname:        DC.B    "dos.library",0
  131. pattern:        DC.B    "NAME/M",0
  132. nonameerr:      DC.B    "No name given",$0a,0
  133. twiceerr:       DC.B    "%s already exists",$0a,0
  134. cantcreateerr:  DC.B    "Can't create directory %s",$0a,0
  135.  
  136.         END
  137.